/**
 * Date:2021年3月15日 上午10:49:09
 * Copyright (c) 2021, www.bwbroad.com All Rights Reserved
 */

package com.app.rabbit;

import java.util.Map;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.context.annotation.Bean;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.stereotype.Component;

import com.app.consumer.vo.Demo;
import com.rabbitmq.client.Channel;

/**
 * Description: Rabbit消息消费端 <br/>
 * Date:2021年3月15日 上午10:49:09 <br/>
 * 
 * @author xuejianxin
 */
@Component
@EnableRabbit
public class JsonConsumer {

	private static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(JsonConsumer.class);

	// =========================queueTest1===============================
	// 定义一个队列
	// 如果在RabbitMQ中通过其他方式已经创建过一个名叫testQueue的队列了，
	// 这里也可以不声明，这里起到的一个效果就是如果你没有这个队列，会按照你声明的方式帮你创建这个队列
	@Bean
	public Queue queueTestJson() {
		return new Queue("queueTestJson" /* 队列名称 */, false/* 是否持久化 */);
	}

	// //简单模式是最简单的消息模式，它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息，消费者从队列中获取消息并消费。
	@RabbitListener(queues = "queueTestJson")
	@RabbitHandler
	public void queueTestJsonHandler(Demo demo, @Headers Map<String, Object> headers, Channel channel)
			throws Exception {
		// DeliveryTag代表的是这个消息在队列中的序号，这个信息存放在MessageProperties中
		channel.basicAck((Long) headers.get(AmqpHeaders.DELIVERY_TAG), false);
		log.info("test1Handler1 msg={}", demo);
	}

}
